<?php

namespace app\sysuser\controller\grammar;

use app\common\controller\SysBackend;
use app\common\model\banxi\grammar\GrammarCategory as GrammarCategoryModel;
use think\db\exception\DbException;
use think\exception\ValidateException;
use think\facade\Validate;
use think\validate\ValidateRule;

/**
 * 课程字典
 */
class GrammarCategory extends SysBackend
{
    protected array $noNeedLogin = [];

    protected array $noNeedPermission = ['*'];

    public function initialize(): void
    {
        parent::initialize();
        $this->model = new GrammarCategoryModel();
    }

    /**
     * 分页查询
     * @return void
     * @throws DbException
     */
    public function listPage(): void
    {
        $param = $this->request->param(['index', 'limit', 'orderBy', "query"]);
        //查询条件解析
        $where = get_query($param);
        //获取分页数据
        $pageParams = get_page_params($param);
        $list = $this->model->getListPage($where, $pageParams['page'], $pageParams['limit']);
        $this->ok('操作成功', result_row($list));
    }


    /**
     * 查询
     * @return void
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function get()
    {
        $param = $this->request->param(["query" => []]);
        if (empty($param['query'])) {
            $this->fail('请传递你要查询的记录');
        }
        $where = get_query($param);
        $info = $this->model->getInfo($where);
        if (empty($info)) {
            $this->fail('记录不存在');
        }
        $this->ok('操作成功', $info);
    }

    /**
     * 新增或修改
     * @return void
     */
    public function saveOrUpdate()
    {
        $param = $this->request->param(['id' => null, 'gradeId' => '', 'name' => 0, 'parentId' => 0, 'sortNum' => 1, 'state' => 1,'videoUrl'=>'','coursewareUrl'=>'','introduction'=>'']);
        try {
            $rule = [
                'name' => ValidateRule::isRequire(null, '请输入名称'),
                'parentId' => ValidateRule::isRequire(null, '请选择上级')->egt(0, '请输入正确的上级'),
                'sortNum' => ValidateRule::isNumber(null, '请输入正确的排序数字'),
                'state' => ValidateRule::in([1, 2], '请选择正确的状态'),
            ];
            if ($param['parentId']) {
                $rule['videoUrl'] = ValidateRule::isRequire(null, '请上传视频');
                $rule['coursewareUrl'] = ValidateRule::isRequire(null, '请填写课件讲义');
                $rule['introduction'] = ValidateRule::isRequire(null, '请填写课程介绍');
            } else {
                $rule['gradeId'] = ValidateRule::requireIf(['parentId', '=', 0], '请选择所属年级');
            }
            $validate = Validate::rule($rule);
            if (!$validate->check($param)) throw new ValidateException($validate->getError());
            $this->model->saveOrUpdate($param);
        } catch (ValidateException $exception) {
            $this->fail($exception->getMessage());
        }
        $this->ok('操作成功', [], self::NOTIFICATION);
    }


    public function del()
    {
        $param = $this->request->param(['ids' => []]);
        try {
            $validate = Validate::rule([
                'ids' => ValidateRule::isRequire(null, '请选择你要删除的记录'),
            ]);
            if (!$validate->check($param)) throw new ValidateException($validate->getError());
            $this->model->del($param['ids']);
        } catch (ValidateException $exception) {
            $this->fail($exception->getMessage());
        }
        $this->ok('操作成功', [], self::NOTIFICATION);
    }
}